﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PSE.Communication.Fix.Common
{
    public sealed class Constants
    {
        private static Constants _instance;
        private Dictionary<string, string> _businessErrorMessages;
        private Dictionary<string, string> _logonError;

        public Constants()
        {
            ///////////////////////////////////////////////////////////////////////////////
            _businessErrorMessages = new Dictionary<string, string>();
            _businessErrorMessages["0"] = "Vínculo invalido";
            _businessErrorMessages["3"] = "Negociador invalido";
            _businessErrorMessages["10"] = "Número do negocio invalido";
            _businessErrorMessages["101"] = "Data pregao invalida";
            _businessErrorMessages["104"] = "Tipo de operacao invalido";
            _businessErrorMessages["105"] = "Negocio não encontrado";
            _businessErrorMessages["106"] = "Negocio não ativo";
            _businessErrorMessages["107"] = "Mercadoria WTR";
            _businessErrorMessages["108"] = "Tipo de negocio nao permite indicacao";
            _businessErrorMessages["109"] = "Modalidade do negocio nao permite indicacao";
            _businessErrorMessages["110"] = "Horario nao permite indicacao";
            _businessErrorMessages["111"] = "Negocio nao pertence ao negociador informado";
            _businessErrorMessages["112"] = "Negocio com indicacao de repasse";
            _businessErrorMessages["113"] = "Negocio especificado";
            _businessErrorMessages["114"] = "Indicador de simulacao invalido";
            _businessErrorMessages["115"] = "Negocio com indicacao PLD";
            _businessErrorMessages["117"] = "Erro na indicacao";
            _businessErrorMessages["118"] = "Erro de sistema - On error";
            _businessErrorMessages["119"] = "Negocio com indicacao de desdobro";
            _businessErrorMessages["120"] = "Negocio de compra para bloqueio";
            _businessErrorMessages["121"] = "Negocio com indicacao de conta master";
            _businessErrorMessages["122"] = "Negocio de estratégia";
            _businessErrorMessages["123"] = "Negocio de energia";
            _businessErrorMessages["124"] = "Negociador não pode ser operador especial";
            _businessErrorMessages["125"] = "Vínculo em duplicidade";
            _businessErrorMessages["126"] = "Quantidade tem que ser igual a original";
            _businessErrorMessages["127"] = "Desdobro nao permitido. Informar mais de um negocio";
            _businessErrorMessages["128"] = "Erro no vínculo de PLD";
            _businessErrorMessages["129"] = "Conta nao possui vínculo PLD";
            _businessErrorMessages["130"] = "Erro no negociador ou cliente";
            _businessErrorMessages["131"] = "Erro no vínculo de repasse";
            _businessErrorMessages["132"] = "Erro no vínculo de repasse";
            _businessErrorMessages["133"] = "Deve ser informando no minimo um PLD ou um repasse";
            _businessErrorMessages["134"] = "Erro na especificacao da conta desdobro";
            _businessErrorMessages["135"] = "Quantidade de ocorrência inválida";
            _businessErrorMessages["136"] = "Registro foi alterado";
            _businessErrorMessages["137"] = "Negocio de correcao";
            _businessErrorMessages["138"] = "Negocio DMA com erro de especificacao";
            _businessErrorMessages["139"] = "Negocio DMA com erro de repasse";
            _businessErrorMessages["140"] = "Negocio DMA com erro de PLD";
            _businessErrorMessages["141"] = "Faltante invalido";
            _businessErrorMessages["142"] = "Faltante divergente da solicitacao";
            _businessErrorMessages["143"] = "Hora limite excedido, somente via carta";
            ///////////////////////////////////////////////////////////////////////////////
            _logonError = new Dictionary<string, string>();
            _logonError["10001"] = "Usuário e/ou senha não informados. Tente novamente.";
            _logonError["10002"] = "Usuário ou senha não conferem.";
            _logonError["10003"] = "Usuário suspenso. Entre em contato com a supervisão de mercado.";
            _logonError["10004"] = "Usuário bloqueado. Tente novamente mais tarde.";
            _logonError["10005"] = "Sua senha expirou. Deseja efetuar a troca de senha?";
            _logonError["10006"] = "A sua senha irá expirar em {0} dias. Deseja efetuar a troca de senha?";
            _logonError["10008"] = "Senha atual não confere.";
            _logonError["10011"] = "Digite a nova senha e digite-a novamente para confirmação.";
            _logonError["10012"] = "Nova senhal é inválida";
            _logonError["10013"] = "Usuário desconectado do sistema.";
            _logonError["10014"] = "Número máximo de sessões simultâneas de login excedido.";
            _logonError["10017"] = "Senha alterada com sucesso.";
            _logonError["10018"] = "O usuário já está logado e não pode se conectar novamente";
            ///////////////////////////////////////////////////////////////////////////////
        }

        public static Constants Instance
        {
            get
            {
                if (_instance == null)
                    _instance = new Constants();

                return _instance;
            }
        }

        // Validação do codigo de erro
        public string GetBusinessErrorMessage(string errorCode)
        { 
            string message = string.Empty;

            if (_businessErrorMessages.ContainsKey(errorCode))
                message = _businessErrorMessages[errorCode];

            return message;
        }

        // Validação do codigo de erro
        public string GetLogonErrorMessage(string errorCode)
        {
            string message = string.Empty;

            if (_logonError.ContainsKey(errorCode))
                message = _logonError[errorCode];

            return message;
        }
    }
}
